package com.macro.mall.tiny.service.Impl;

import com.github.pagehelper.PageHelper;
import com.macro.mall.tiny.dao.PmsProductAttributeDao;
import com.macro.mall.tiny.dto.ProductAttributeParam;
import com.macro.mall.tiny.mbg.mapper.PmsProductAttributeCategoryMapper;
import com.macro.mall.tiny.mbg.mapper.PmsProductAttributeMapper;
import com.macro.mall.tiny.mbg.model.PmsProductAttribute;
import com.macro.mall.tiny.mbg.model.PmsProductAttributeCategory;
import com.macro.mall.tiny.mbg.model.PmsProductAttributeExample;
import com.macro.mall.tiny.service.PmsProductAttributeService;
import com.macro.mall.tiny.vo.ProductAttrInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class PmsProductAttributeServiceImpl implements PmsProductAttributeService {

    @Autowired
    private PmsProductAttributeMapper pmsProductAttributeMapper;
    @Autowired
    private PmsProductAttributeCategoryMapper pmsProductAttributeCategoryMapper;
    @Autowired
    private PmsProductAttributeDao pmsProductAttributeDao;

    //查询单个商品属性
    public PmsProductAttribute getById(Long id){

        return pmsProductAttributeMapper.selectByPrimaryKey(id);
    }

    //新增商品属性信息
    @Override
    public Integer create(PmsProductAttribute pmsProductAttribute) {
        Integer code=pmsProductAttributeMapper.insertSelective(pmsProductAttribute);

        PmsProductAttributeCategory pmsProductAttributeCategory=pmsProductAttributeCategoryMapper.selectByPrimaryKey(pmsProductAttribute.getProductAttributeCategoryId());
        if(pmsProductAttribute.getType()==0){
            pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount()+1);
        }else{
            pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount()+1);
        }

        Integer num=pmsProductAttributeCategoryMapper.updateByPrimaryKey(pmsProductAttributeCategory);

        return code+num;
    }

    //根据分类查询属性列表或参数列表
    @Override
    public List<PmsProductAttribute> getList(Long cid, Integer type, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        PmsProductAttributeExample example=new PmsProductAttributeExample();
        PmsProductAttributeExample.Criteria criteria= example.createCriteria();
        criteria.andProductAttributeCategoryIdEqualTo(cid);
        criteria.andTypeEqualTo(type);
        List<PmsProductAttribute> pmsProductAttributeList=pmsProductAttributeMapper.selectByExample(example);

        return pmsProductAttributeList;
    }

    //修改商品属性信息
    @Override
    public Integer updateById(Long id, ProductAttributeParam productAttributeParam) {
        PmsProductAttribute pmsProductAttribute=new PmsProductAttribute();
        BeanUtils.copyProperties(productAttributeParam,pmsProductAttribute);
        pmsProductAttribute.setId(id);
        Integer code=pmsProductAttributeMapper.updateByPrimaryKeySelective(pmsProductAttribute);
        return code;
    }

    //批量删除商品属性
    @Override
    public Integer deleteByIdList(List<Long> ids) {
        PmsProductAttribute pmsProductAttribute=pmsProductAttributeMapper.selectByPrimaryKey(ids.get(0));
        PmsProductAttributeCategory pmsProductAttributeCategory= pmsProductAttributeCategoryMapper.selectByPrimaryKey(pmsProductAttribute.getProductAttributeCategoryId());

        PmsProductAttributeExample example=new PmsProductAttributeExample();
        PmsProductAttributeExample.Criteria criteria= example.createCriteria();
        criteria.andIdIn(ids);
        Integer code=pmsProductAttributeMapper.deleteByExample(example);

        if(pmsProductAttribute.getType()==0){
            if(pmsProductAttributeCategory.getAttributeCount()>=ids.size()){
                pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount()-ids.size());
            }else{
                pmsProductAttributeCategory.setAttributeCount(0);
            }
        }else if(pmsProductAttribute.getType()==1){
            if(pmsProductAttributeCategory.getParamCount()>=ids.size()){
                pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount()-ids.size());
            }else{
                pmsProductAttributeCategory.setParamCount(0);
            }
        }
        Integer number= pmsProductAttributeCategoryMapper.updateByPrimaryKeySelective(pmsProductAttributeCategory);

        return code+number;
    }

    //根据商品分类的id获取商品属性及其属性分类
    @Override
    public List<ProductAttrInfo> getAttrInfo(Long productCategoryId) {
        return pmsProductAttributeDao.getProductAttrInfo(productCategoryId);
    }


}
